<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>



    function* gen() {
        try {
            let data = yield request();
            yield put({ type: '', data });
        } catch (error) {
            yield put({ type: '', message: 'error message' });
        }
    }

    // 模拟异步发送请求，2s后拿数据，把数据做为next的参数，用于下一步操作
    function request() {
        setTimeout(function () {
            it.next('{"a":1,"b":2}');
        }, 2000);
    }

    function put() {
        console.log('---- request -----')
        setTimeout(function () {
            it.next('{"a":1,"b":2}');
            console.log('---- request: next -----')
        }, 2000);
        return 2222
    }

    function runGen () {
        var it = gen(); // 创建生成器，生成不执行
        console.log('---- runGen -----')
        // 执行第一个 yield 前面的部分，可以获取到第一个 yield 的返回值
        const data = it.next();
        console.log('---- runGen: next -----', data)
        return it
    }

    var it = runGen(); // {a: 1, b: 2}






</script>
</body>
</html>